import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';
import defaultConfig from '../../config/index.js'; // 相对路径
import { useAllDataStore } from '@/stores';
import { useRouter } from 'vue-router';
import { msgError,msg18n } from '@/utils/msg';

// 创建 axios 实例
const instance: AxiosInstance = axios.create({
  baseURL: defaultConfig.apiBaseUrl,//'http://127.0.0.1:5173', // 'http://127.0.0.1:8080',  http://127.0.0.1:5173' // 替换为你的 API 基础地址 http://127.0.0.1:8080/
  timeout: 5000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器
instance.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    // 在发送请求之前做些什么，例如添加 Token
    const store = useAllDataStore();
    const token = store.getTokenKey();//localStorage.getItem('token_key'); // 假设使用 localStorage 存储 token
    
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    // 增加 API KEY

    const api_key = defaultConfig.apiKey//config.apiKey;
    
    if (api_key) {
      config.headers['x-api-key'] = `${api_key}`;
    }
    const language=store.getLocale();
    if (language) {
      config.headers['x-language'] = `${language}`;
    }
    return config;
  },
  (error: AxiosError) => {
    // 对请求错误做些什么
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);
 
  
// 响应拦截器
instance.interceptors.response.use(
  (response: AxiosResponse) => {
    // 对响应数据做点什么
    return response.data; // 直接返回数据
  },
  (error: AxiosError) => {
    // 对响应错误做点什么
    if (error.response) {
      // 请求已发出，但服务器响应的状态码不在 2xx 范围内
      console.error('响应错误:', error.response);
      if (error.response.status === 401) {
       // ① 清 token
       const router = useRouter();
      if (router.currentRoute.value.path !== '/login') {
        router.replace('/login'); // ② 跳登录
      }
      //ElMessage.error('登录已过期，请重新登录');
      return { status_code: 401, status: 'error', message: '未授权', data: {} };
    }


      if (error.response.status >= 300) {
        
        // 401 错误处理，例如重新登录
        msgError(error.response.data.detail)
        return Promise.reject(error.response.data);
        //return {"status_code":error.response.status,"status":"error","message":error.response.data.detail,"data":{}}
        // 重新登录逻辑
      }
      else{
         return Promise.reject(error.response.data); // 返回后端返回的错误数据
      }
     
    } else if (error.request) {
      // 请求已发出，但没有收到响应
      console.error('请求错误:', error.request);
      return Promise.reject(error.request);
    } else {
      // 在设置请求时触发了错误
      console.error('请求设置错误:', error.message);
      return Promise.reject(error.message);
    }
  }
);

// 封装常用的请求方法
export const request = (url: string, data: any = {}, method: string = 'GET') => {
  return instance({
    url,
    method,
    data: method.toUpperCase() === 'GET' ? null : data,
    params: method.toUpperCase() === 'GET' ? data : null
  });
};

// 封装 POST 请求
export const post = (url: string, data: any = {}) => {
  return request(url, data, 'POST');
};

// 封装 put 请求
export const put = (url: string, data: any = {}) => {
  return request(url, data, 'PUT');
};

// 封装 delete 请求
export const httpDelete = (url: string, data: any = {}) => {
  return request(url, data, 'DELETE');
};

// 封装 GET 请求
export const get = (url: string, params: any = {}) => {
  return request(url, params, 'GET');
};
